# 载入必要的 R 包
library(arules)
library(dplyr)

# 读取 CSV 文件，指定 UTF-8 编码
data <- read.csv("data.csv", stringsAsFactors = FALSE, fileEncoding = "UTF-8")

# 定义一个函数来删除处方中的重复中药
remove_duplicates <- function(prescription) {
  # 将处方分割成单独的中药名称
  medicines <- strsplit(prescription, ",")[[1]]
  
  # 去除空格
  medicines <- trimws(medicines)
  
  # 删除重复的药材，保留第一次出现的
  unique_medicines <- unique(medicines)
  
  # 重新合并为一个字符串，并返回
  return(paste(unique_medicines, collapse = ","))
}

# 应用函数删除重复药材
data$prescription <- sapply(data$prescription, remove_duplicates)

# 保存处理后的数据为新的 CSV 文件，指定 UTF-8 编码
#write.csv(data, "processed_data.csv", row.names = FALSE, fileEncoding = "UTF-8")

# 显示处理后的数据（前几行）
cat("处理后的数据（前几行）：\n")
print(head(data))

# 将每条处方转换为事务（transaction）格式
data_list <- strsplit(data$prescription, ",")  # 假设 CSV 中有一个 '处方' 列存储中药名

# 去除空格
data_list <- lapply(data_list, trimws)

# 将数据转换为事务（transaction）格式
trans <- as(data_list, "transactions")

# 使用 apriori() 生成频繁项集和关联规则
rules <- apriori(trans, parameter = list(support = 0.1, confidence = 0.5))

# 只关注关联规则，输出关联规则
cat("请输入你感兴趣的中药（以逗号分隔）：\n")
interested_medicines_input <- readline()
interested_medicines <- strsplit(interested_medicines_input, ",")[[1]]
interested_medicines <- trimws(interested_medicines)  # 去除多余空格

# 筛选出包含用户输入的中药的关联规则
rules_filtered <- subset(rules, lhs %in% interested_medicines | rhs %in% interested_medicines)

cat("\n与输入中药相关的关联规则：\n")
inspect(rules_filtered)
write.csv(rules_filtered, "rules_filtered.csv", row.names = FALSE, fileEncoding = "UTF-8")
write.csv(as(rules_filtered, "data.frame"), file = "rules_filtered.csv", row.names = FALSE)
